package helper

import (
	"errors"
	"net"
)

func GetIP() (net.IP,error){
	ifaces,err:=net.Interfaces()
	if err != nil{
		return nil,err
	}
	for _,iface :=range ifaces{
		if iface.Flags&net.FlagUp==0{
			continue
		}
		if iface.Flags&net.FlagLoopback !=0{
			continue
		}
		addrs,err:=iface.Addrs()
		if err != nil{
			return nil,err
		}
		for _,addr :=range addrs{
			ip :=getIPFromAddr(addr)
			if ip==nil{
				continue
			}
			return ip,nil
		}
	}
	return nil,errors.New("connected to the network?")
}
func getIPFromAddr(addr net.Addr) net.IP{
	var ip net.IP
	switch v:=addr.(type){
	case *net.IPNet:
		ip = v.IP
	case *net.IPAddr:
		ip=v.IP
	}
	if ip==nil || ip.IsLoopback(){
		return nil
	}
	ip=ip.To4()
	if ip==nil{
		return nil
	}
	return ip
}